package org.andengine.extension.svg.util;


/**
 * @author Larva Labs, LLC
 *         (c) 2010 Nicolas Gramlich
 *         (c) 2011 Zynga Inc.
 * @author Nicolas Gramlich
 * @since 16:50:17 - 21.05.2011
 */
public class SVGNumberParser {
    // ===========================================================
    // Constants
    // ===========================================================

    // ===========================================================
    // Fields
    // ===========================================================

    // ===========================================================
    // Constructors
    // ===========================================================

    // ===========================================================
    // Getter & Setter
    // ===========================================================

    // ===========================================================
    // Methods for/from SuperClass/Interfaces
    // ===========================================================

    // ===========================================================
    // Methods
    // ===========================================================

    public static SVGNumberParserFloatResult parseFloats(final String pString) {
        if (pString == null) {
            return null;
        }

        final String[] parts = pString.split("[\\s,]+");
        final float[] numbers = new float[parts.length];
        for (int i = parts.length - 1; i >= 0; i--) {
            numbers[i] = Float.parseFloat(parts[i]);
        }

        return new SVGNumberParserFloatResult(numbers);
    }

    public static SVGNumberParserIntegerResult parseInts(final String pString) {
        if (pString == null) {
            return null;
        }

        final String[] parts = pString.split("[\\s,]+");
        final int[] numbers = new int[parts.length];
        for (int i = parts.length - 1; i >= 0; i--) {
            numbers[i] = Integer.parseInt(parts[i]);
        }

        return new SVGNumberParserIntegerResult(numbers);
    }

    // ===========================================================
    // Inner and Anonymous Classes
    // ===========================================================

    public static class SVGNumberParserIntegerResult {
        // ===========================================================
        // Constants
        // ===========================================================

        // ===========================================================
        // Fields
        // ===========================================================

        private final int[] mNumbers;

        // ===========================================================
        // Constructors
        // ===========================================================

        public SVGNumberParserIntegerResult(final int[] pNumbers) {
            this.mNumbers = pNumbers;
        }

        // ===========================================================
        // Getter & Setter
        // ===========================================================


        public int[] getNumbers() {
            return this.mNumbers;
        }

        public int getNumberCount() {
            return this.mNumbers.length;
        }

        public int getNumber(final int pIndex) {
            return this.mNumbers[pIndex];
        }

        // ===========================================================
        // Methods for/from SuperClass/Interfaces
        // ===========================================================

        // ===========================================================
        // Methods
        // ===========================================================

        // ===========================================================
        // Inner and Anonymous Classes
        // ===========================================================
    }

    public static class SVGNumberParserFloatResult {
        // ===========================================================
        // Constants
        // ===========================================================

        // ===========================================================
        // Fields
        // ===========================================================

        private final float[] mNumbers;

        // ===========================================================
        // Constructors
        // ===========================================================

        public SVGNumberParserFloatResult(final float[] pNumbers) {
            this.mNumbers = pNumbers;
        }

        // ===========================================================
        // Getter & Setter
        // ===========================================================


        public float[] getNumbers() {
            return this.mNumbers;
        }

        public int getNumberCount() {
            return this.mNumbers.length;
        }

        public float getNumber(final int pIndex) {
            return this.mNumbers[pIndex];
        }

        // ===========================================================
        // Methods for/from SuperClass/Interfaces
        // ===========================================================

        // ===========================================================
        // Methods
        // ===========================================================

        // ===========================================================
        // Inner and Anonymous Classes
        // ===========================================================
    }
}